package com.ty.config;

import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

@Component
public class ExecutorConfig {



    @Bean("asyncScheduledPool")
    public Executor asyncScheduledPool(){
        //线程池的核心参数有哪些？
        // 第一种方式
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();//ThreadFactory
        executor.setCorePoolSize(5); //设置核心线程数 ： 长工  五险一金
        executor.setMaxPoolSize(12); //设置最大线程数  : 长工 + 临时工 不能操过这个数  我们的临时工最多7个
        executor.setQueueCapacity(100);// 任务队列的大小
        executor.setKeepAliveSeconds(60);//非核心(临时工)线程空闲超时时间 60s
        executor.setThreadNamePrefix("MyExecutor-"); //线程名称前缀，便于调试
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//拒绝策略，当线程池和队列都满时如何处理新任务
        executor.initialize();

        //        //构建者模式 第二种方式
//        ExecutorService executor2 = ExecutorBuilder.create()
//                .setCorePoolSize(5) // 设置核心线程数
//                .setMaxPoolSize(10) // 设置最大线程数
//                .setWorkQueue(new LinkedBlockingQueue<>(100)) // 线程队列大小
//                .setHandler(new ThreadPoolExecutor.CallerRunsPolicy()) //设置拒绝策略
//                .build();
        return  executor;
    }

}
